package top.infopub.mgr.la.service.impl;

import java.math.BigDecimal;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import top.infopub.generic.GenericDao;
import top.infopub.generic.GenericServiceImpl;
import top.infopub.mgr.flow.service.WsFlowProcessService;
import top.infopub.mgr.la.dao.SueLawcaseAttDao;
import top.infopub.mgr.la.dao.SueLawcaseDao;
import top.infopub.mgr.la.dao.SueLawcaseProofAttDao;
import top.infopub.mgr.la.dao.SueLawcaseProofDao;
import top.infopub.mgr.la.domain.SueLawcaseDomain;
import top.infopub.mgr.la.service.SueLawcaseService;
import top.infopub.mgr.la.vo.SueLawcaseVo;
import top.infopub.model.la.SueLawcase;
import top.infopub.model.la.SueLawcaseAtt;
import top.infopub.model.la.SueLawcaseProof;
import top.infopub.model.la.SueLawcaseProofAtt;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

@Service
public class SueLawcaseServiceImpl extends GenericServiceImpl<SueLawcase, String> implements
		SueLawcaseService {

	@Autowired
	private SueLawcaseDao sueLawcaseDao;
	
	@Autowired
	private SueLawcaseAttDao sueLawcaseAttDao;
	
	@Autowired
	private SueLawcaseProofDao sueLawcaseProofDao;
	
	@Autowired
	private SueLawcaseProofAttDao sueLawcaseProofAttDao;
	
	@Autowired
	private WsFlowProcessService wsFlowProcess;
	
	@Override
	public GenericDao<SueLawcase, String> getDao() {
		return sueLawcaseDao;
	}

    @Override
    public Page<SueLawcaseDomain> selectByDomainWhere(Page<SueLawcaseDomain> page,
                                                      SueLawcaseVo sueLawcaseVo) {
        PageHelper.startPage(page.getPageNum(), page.getPageSize());
        return (Page<SueLawcaseDomain>)sueLawcaseDao.selectByDomainWhere(sueLawcaseVo);
    }

    @Override
    public Page<SueLawcaseDomain> selectMyCheckByDomainWhere(Page<SueLawcaseDomain> page,
                                                             SueLawcaseVo sueLawcaseVo) {
        PageHelper.startPage(page.getPageNum(), page.getPageSize());
        return (Page<SueLawcaseDomain>)sueLawcaseDao.selectMyCheckByDomainWhere(sueLawcaseVo);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveSueLawcase(SueLawcase sueLawcase, List<SueLawcaseAtt> sueLawcaseAtts,
                               List<SueLawcaseProof> sueLawcaseProofs,
                               List<SueLawcaseProofAtt> sueLawcaseProofAtts) {
        
        sueLawcaseDao.insertById(sueLawcase);
        
        if(CollectionUtils.isNotEmpty(sueLawcaseAtts)){
            sueLawcaseAttDao.insertByBatch(sueLawcaseAtts);
        }
        
        if(CollectionUtils.isNotEmpty(sueLawcaseProofs)){
            sueLawcaseProofDao.insertByBatch(sueLawcaseProofs);
        }
        
        if(CollectionUtils.isNotEmpty(sueLawcaseProofAtts)){
            sueLawcaseProofAttDao.insertByBatch(sueLawcaseProofAtts);
        }
        // 1000万
        BigDecimal cmp = new BigDecimal("10000000");
        String srcBizTable = "LA_SUE_LAWCASE";
        String branchCode_lt = "target_amount<=1000万";
        String branchCode_gt = "target_amount>1000万";
        String templateId = "";
        // <=1000万
        if (sueLawcase.getTargetAmount().compareTo(cmp) <= 0) {
            templateId = wsFlowProcess.queryTemplateIdByTableBranch(srcBizTable, branchCode_lt);
        }
        else {
            templateId = wsFlowProcess.queryTemplateIdByTableBranch(srcBizTable, branchCode_gt);
        }
        // 处理工作流数据
        wsFlowProcess.launch(templateId, srcBizTable, sueLawcase.getId(),
            sueLawcase.getProcessId(), null);
    }

    @Override
    public SueLawcaseVo queryById(String id) {
        return sueLawcaseDao.queryById(id);
    }

    @Override
    public int countLawcaseName(String lawcaseName) {
        return sueLawcaseDao.countLawcaseName(lawcaseName);
    }

    @Override
    public List<SueLawcase> selectNotUpwardList() {
        return sueLawcaseDao.selectNotUpwardList();
    }

    @Override
    public List<SueLawcase> selectUsableCarry() {
        return sueLawcaseDao.selectUsableCarry();
    }
    
    @Override
    public List<SueLawcase> selectUsablePeace() {
        return sueLawcaseDao.selectUsablePeace();
    }

}